{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[NbConvertApp] Converting notebook seqInit.ipynb to python\n",
      "[NbConvertApp] Writing 1367 bytes to seqInit.py\n"
     ]
    }
   ],
   "source": [
    "!jupyter nbconvert --to python seqInit.ipynb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fed40270da0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dataSet shape :\t (144, 1)\n",
      "train data shape : (120, 1)\n",
      "real data shape : (144, 1)\n"
     ]
    }
   ],
   "source": [
    "# 引入torch相关模块\n",
    "import torch\n",
    "from torch import nn, optim\n",
    "from torch.autograd import Variable\n",
    "from torch.nn import init\n",
    "\n",
    "# 引入初始化文件中的相关内容\n",
    "from seqInit import toTs, cudAvl\n",
    "from seqInit import input_size\n",
    "from seqInit import train, real\n",
    "\n",
    "# 引入画图工具\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义GRU模型\n",
    "\n",
    "class gruModel(nn.Module) :\n",
    "    def __init__(self, in_dim, hidden_dim, out_dim, hidden_layer) :\n",
    "        super().__init__()\n",
    "        self.gruLayer = nn.GRU(in_dim, hidden_dim, hidden_layer)\n",
    "        self.fcLayer = nn.Linear(hidden_dim, out_dim)\n",
    "    \n",
    "    def forward(self, x) :\n",
    "        out, _ = self.gruLayer(x)\n",
    "        out = out[12:]\n",
    "        out = self.fcLayer(out)\n",
    "        return out\n",
    "        \n",
    "# 输入维度为1，输出维度为1，隐藏层维数为5, 定义LSTM层数为2\n",
    "gru = cudAvl(gruModel(1, 5, 1, 2))\n",
    "\n",
    "# 定义损失函数和优化函数\n",
    "\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = optim.Adam(gru.parameters(), lr = 1e-2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([119, 1, 1]) torch.Size([107, 1, 1])\n"
     ]
    }
   ],
   "source": [
    "# 处理输入\n",
    "\n",
    "train = train.reshape(-1, 1, 1)\n",
    "x = torch.from_numpy(train[:-1])\n",
    "y = torch.from_numpy(train[1:])[12:]\n",
    "print(x.shape, y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch[400/4000], Loss: 0.00212\n",
      "Epoch[800/4000], Loss: 0.00084\n",
      "Epoch[1200/4000], Loss: 0.00067\n",
      "Epoch[1600/4000], Loss: 0.00057\n",
      "Epoch[2000/4000], Loss: 0.00048\n",
      "Epoch[2400/4000], Loss: 0.00034\n",
      "Epoch[2800/4000], Loss: 0.00025\n",
      "Epoch[3200/4000], Loss: 0.00019\n",
      "Epoch[3600/4000], Loss: 0.00017\n",
      "Epoch[4000/4000], Loss: 0.00016\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEICAYAAACzliQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAHJ1JREFUeJzt3Xm0nHWd5/H3565ZhUAiAklIUEBh\nVKRj7B4dxhUjraRPH2xD9zjocIYz3XJmetRRHLsB04vbzDTdPTjKKG6tAm59oh0HoqLjGRcSJIDR\nDoQQSSKQQMKW5W71nT+eXyV1i6qn6uYudfndz+vknnr251tPVT7P7/6e51YpIjAzs5mhq9MFmJnZ\n1HHom5nNIA59M7MZxKFvZjaDOPTNzGYQh76Z2Qzi0J+hJO2Q9Pop2tdsSd+S9ISkr07FPmv2vUXS\nq6dyn2bTmUPfpsLFwEnAiRHx1snaiaTPSfrL2mkRcU5E/GCy9nksJvqEO5UncHv2c+jbVDgNuDci\nhjtdiB07ST2drsHGz6FvSOqXdK2k36SfayX1p3kLJX1b0uOS9kn6kaSuNO/9knZLekrSVkmva7Dt\nDwFXAW+T9LSkyyRdI+kfapZZJimqoSLpB5L+QtL/S9u+VdLCmuVfJenHqaadkt4h6XLgj4D3pf18\nKy17pBXc4nm+WtIuSe+RtEfSQ5LeWXLMTpG0Lh2TbZL+fc28Ub9xVLedhr8ILAW+lep8X83zvzzV\n9ZCk9x7r9prUu1rSZklPSrpf0qr645PGj7w2NXVdJulB4PuSviPpirpt3yXp99PwCyVtSMdlq6Q/\naHYMrTMc+gbwQeC3gXOBlwIrgT9L894D7AIWUXTR/FcgJJ0FXAG8PCLmA28EdtRvOCKuBv4auCki\n5kXEZ9qs6Q+BdwLPBfqA9wJIOg34DvD3qaZzgc0RcT3wJeBjaT9vGePzBHgecBxwKnAZcJ2kBU3q\nu5HiuJxC0X3115Je2+pJRcTbgQeBt6Q6P1Yz+zXAGcAFwPvb6bJpsT0AJK0EvgD8F+B44HwavFYl\n/jXwIorX+CvAJTXbPpviN7l/kjQX2AB8meJ1WwN8Ii1j04RD36BoIa+NiD0RsRf4EPD2NG8IOBk4\nLSKGIuJHUXxg0wjQD5wtqTcidkTE/RNY02cj4t6IOATcTBHUUJwMvhsRX0n1PBYRm9vcZtnzhOK5\nrk3bXQ88DZxVvxFJS4BXAu+PiMNp/58G/u2xPNEaH4qIAxFxD/BZasJ1nC4DboiIDRFRiYjdEfHP\nY1j/mlTXIeCbwLnp5AvFMf1GRAwAbwZ2RMRnI2I4Iu4Evg5M2nUcGzuHvkHRWv11zfiv0zSAjwPb\ngFslbZd0JUBEbAP+FLgG2CPpRkmnMHEerhk+CMxLw0uAYz25lD1PgMfqrjvU7rd+O/si4qm6bZ16\njHVV7SypbTzGc8ygpq70nP+JohUPxYnpS2n4NOAVqdvtcUmPU5wUnjeOfdsEc+gbwG8o/sNWLU3T\niIinIuI9EXE6cBHw7mrffUR8OSJeldYN4KNt7u8AMKdmfCyhsBN4fpN5rT4ytunzHKPfACdIml+3\nrd1puNXza1bnkia1Hev2qsqOWTuvRf32vwJcIul3gFnAbTX7+WFEHF/zMy8i/rhFfTaFHPoGxX/i\nP5O0KF0wvQqoXsx7s6QXSBLwBEW3TkXSWZJemy6EHgYOAZU297cZOF/SUknHAR8YQ61fAl4v6Q8k\n9Ug6UVK16+cR4PRjeZ5jERE7gR8DH5Y0S9JLKLpQqtvaDFwo6QRJz6P4jahWszr/XNIcSedQXM+4\naZzbq/oM8E5Jr5PUJelUSS+s2fYaSb2SVlBcn2hlPcXJcy3FtZrq6/5t4ExJb0/b65X0ckkvamOb\nNkUc+gbwl8Am4G7gHuDnaRoUFxa/S9G//RPgExFxG0V//keARym6Yp5Lm+EdERsoAu1u4A6KsGhL\nRDwIXEhxgXkfRWi9NM3+DMU1hscl/eMYn+dYXQIso2iNfxO4OiK+m+Z9EbiL4mLprRwN76oPU5x8\nHq+9Swf4IUVX2veA/xYRt45zewBExO0UJ5G/oThx/5Cjv/H8OcVvAfsprnF8udUTT/333wBeX7t8\n6vq5gKLr5zcU74uPUrxXbJqQv0TFrLMkLQMeAHr9tww22dzSNzObQRz6ZmYziLt3zMxmELf0zcxm\nkGn3AUoLFy6MZcuWdboMM7NnlTvuuOPRiFjUarlpF/rLli1j06ZNnS7DzOxZRdKvWy/l7h0zsxnF\noW9mNoM49M3MZhCHvpnZDOLQNzObQRz6ZmYziEPfzGwGySb0Dw4O8z9u3cqdD+7vdClmZtNWNqF/\naHCEv/v+Nu7Z/USnSzEzm7ayCf0qf36cmVlz2YR+8W1+ZmZWJpvQr/JHRZuZNZdN6Ludb2bWWjah\nX+V2vplZc9mEvrv0zcxayyb0q9ylb2bWXDahL/fqm5m1lE3oV7mhb2bWXD6h74a+mVlL+YR+4vv0\nzcyayyb0ffeOmVlr2YS+mZm1lk3ou6FvZtZaNqFf5S59M7Pmsgl9f8qmmVlr2YR+VfhOfTOzprIJ\nfbfzzcxayyb0q9ynb2bWXDah7y59M7PWsgn9Kjf0zcyayyb0/SmbZmatZRP6Ve7TNzNrLpvQd5++\nmVlrbYW+pFWStkraJunKBvPfLemXku6W9D1Jp9XMu1TSfenn0oksvhHfp29m1lzL0JfUDVwHvAk4\nG7hE0tl1i90JrIiIlwBfAz6W1j0BuBp4BbASuFrSgokr38zMxqKdlv5KYFtEbI+IQeBGYHXtAhFx\nW0QcTKM/BRan4TcCGyJiX0TsBzYAqyam9Mbcp29m1lw7oX8qsLNmfFea1sxlwHfGsq6kyyVtkrRp\n7969bZRkZmbHYkIv5Er6N8AK4ONjWS8iro+IFRGxYtGiRce472NazcxsRmkn9HcDS2rGF6dpo0h6\nPfBB4KKIGBjLumZmNjXaCf2NwBmSlkvqA9YA62oXkPQy4FMUgb+nZtYtwAWSFqQLuBekaRPOf5xl\nZtZaT6sFImJY0hUUYd0N3BARWyStBTZFxDqK7px5wFfT59o/GBEXRcQ+SX9BceIAWBsR+yblmRyt\ndzI3b2b2rNYy9AEiYj2wvm7aVTXDry9Z9wbghmMtsF3u0zczay2bv8itckPfzKy5bELfDX0zs9ay\nCf0qN/TNzJrLJvT9xehmZq1lE/pV7tM3M2sum9B3O9/MrLVsQr/KH61sZtZcNqHvLn0zs9ayCf0q\n9+mbmTWXTej77h0zs9ayCf0qN/TNzJrLLvTNzKy5/ELfnfpmZk1lFfru1jczK5dV6IP79M3MymQV\n+m7om5mVyyr0wV36ZmZlsgp936tvZlYuq9AHf/aOmVmZrELf7Xwzs3JZhT64T9/MrExWoe8ufTOz\nclmFPvg+fTOzMlmFvtyrb2ZWKqvQB/fpm5mVySv03dA3MyuVV+jj+/TNzMpkFfpu6JuZlcsq9AHf\nvmNmViKr0Pd9+mZm5bIKfXBD38ysTFah7/v0zczKZRX6AOEb9c3Mmsoq9N2nb2ZWrq3Ql7RK0lZJ\n2yRd2WD++ZJ+LmlY0sV180YkbU4/6yaq8Gbc0Dcza66n1QKSuoHrgDcAu4CNktZFxC9rFnsQeAfw\n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\nB4kqA5r7Xz9GAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fecd01c1320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1min 1s, sys: 11.1 s, total: 1min 13s\n",
      "Wall time: 1min 13s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# 训练模型\n",
    "\n",
    "frq, sec = 4000, 400\n",
    "loss_set = []\n",
    "\n",
    "for e in range(1, frq + 1) :\n",
    "    inputs = cudAvl(Variable(x))\n",
    "    target = cudAvl(Variable(y))\n",
    "    #forward\n",
    "    output = gru(inputs)\n",
    "    loss = criterion(output, target)\n",
    "    # update paramters\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "    #print training information\n",
    "    print_loss = loss.data[0]\n",
    "    loss_set.append((e, print_loss))\n",
    "    if e % sec == 0 :\n",
    "        print('Epoch[{}/{}], Loss: {:.5f}'.format(e, frq, print_loss))\n",
    "\n",
    "# 作出损失函数变化图像\n",
    "pltX = np.array([loss[0] for loss in loss_set])\n",
    "pltY = np.array([loss[1] for loss in loss_set])\n",
    "plt.title('loss function output curve')\n",
    "plt.plot(pltX, pltY)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([143, 1, 1]) (131,) (143,)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fecb52e6978>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fecb5340748>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "gru = gru.eval()\n",
    "\n",
    "# 预测结果并比较\n",
    "\n",
    "px = real[:-1].reshape(-1, 1, 1)\n",
    "px = torch.from_numpy(px)\n",
    "ry = real[1:].reshape(-1)\n",
    "varX = cudAvl(Variable(px, volatile=True))\n",
    "py = gru(varX).data\n",
    "py = np.array(py).reshape(-1)\n",
    "print(px.shape, py.shape, ry.shape)\n",
    "\n",
    "# 画出实际结果和预测的结果\n",
    "plt.plot(py[-24:], 'r', label='prediction')\n",
    "plt.plot(ry[-24:], 'b', label='real')\n",
    "plt.legend(loc='best')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
